package handler

import (
	"context"
	"strconv"

	"gitee.com/jn-shao/common"

	"podSrv/domain/model"
	"podSrv/domain/service"
	pod "podSrv/proto/podSrv"
)

type PodHandler struct {
	//注意这里的类型是 IPodDataService 接口类型
	PodDataService service.IPodDataService
}

// 添加创建 POD
func (e *PodHandler) AddPod(ctx context.Context, info *pod.PodInfo, rsp *pod.Response) error {
	common.Info("添加pod")
	podModel := &model.Pod{}
	if err := common.SwapTo(info, podModel); err != nil {
		common.Error(err)
		rsp.Msg = err.Error()
		return err
	}
	if err := e.PodDataService.CreateToK8s(info); err != nil {
		common.Error(err)
		rsp.Msg = err.Error()
		return err
	} else {
		//操作数据库写入数据
		podID, err := e.PodDataService.AddPod(podModel)
		if err != nil {
			common.Error(err)
			rsp.Msg = err.Error()
			return err
		}
		common.Info("Pod 添加成功数据库ID号为：" + strconv.FormatInt(podID, 10))
		rsp.Msg = "Pod 添加成功数据库ID号为：" + strconv.FormatInt(podID, 10)
	}

	return nil
}

// 删除 POD
func (e *PodHandler) DeletePod(ctx context.Context, req *pod.PodId, rsp *pod.Response) error {
	//先查找数据
	podModel, err := e.PodDataService.FindPodByID(req.Id)
	if err != nil {
		common.Error(err)
		return err
	}
	if err := e.PodDataService.DeleteFromK8s(podModel); err != nil {
		common.Error(err)
		return err
	} else {
		if err := e.PodDataService.DeletePod(req.Id); err != nil {
			common.Error(err)
			return err
		}
		common.Info("删除Pod ID：" + strconv.FormatInt(req.Id, 10))
	}
	return nil
}

// 更新指定的 POD
func (e *PodHandler) UpdatePod(ctx context.Context, req *pod.PodInfo, rsp *pod.Response) error {
	podMode := &model.Pod{}
	if err := common.SwapTo(req, podMode); err != nil {
		common.Error(err)
		rsp.Msg = err.Error()
		return err
	}
	//先更新k8s中的pod信息
	if err := e.PodDataService.UpdateToK8s(req); err != nil {
		common.Error(err)
		rsp.Msg = err.Error()
		return err
	} else {
		if err := e.PodDataService.UpdatePod(podMode); err != nil {
			common.Error(err)
			rsp.Msg = err.Error()
			return err
		}
		common.Info("更新Pod ID：" + strconv.FormatInt(req.Id, 10))
	}

	return nil
}

// 查询单个信息
func (e *PodHandler) FindPodByID(ctx context.Context, req *pod.PodId, rsp *pod.PodInfo) error {
	//查询pod数据
	podModel, err := e.PodDataService.FindPodByID(req.Id)
	if err != nil {
		common.Error(err)
		return err
	}
	err = common.SwapTo(podModel, rsp)
	if err != nil {
		common.Error(err)
		return err
	}
	return nil
}

// 查询所有 POD
func (e *PodHandler) FindPodList(ctx context.Context, req *pod.FindPod, rsp *pod.PodList) error {
	//查询所有pod
	page := &model.Page{Pages: req.Pages, PagePerNums: req.PagePerNums}
	total, podList, err := e.PodDataService.FindPodList(page)
	if err != nil {
		common.Error(err)
		return err
	}

	rsp.Total = total
	//整理格式
	for _, v := range podList {
		podInfo := &pod.PodInfo{}
		err := common.SwapTo(v, podInfo)
		if err != nil {
			common.Error(err)
			return err
		}
		rsp.Data = append(rsp.Data, podInfo)
	}
	return nil
}
